package com.xbongbong.paas.enums;

import com.xbongbong.saas.enums.SelectProductEnum;
import com.xbongbong.saas.enums.XbbRefTypeEnum;
import lombok.Getter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author lee
 * @version v1.0
 * @date 2019/11/10 11:13
 * @since v1.0
 */
@Getter
public enum RelativeProductExportEnum {

    CONTRACT_PRODUCT(XbbRefTypeEnum.CONTRACT.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    OPPORTUNITY_PRODUCT(XbbRefTypeEnum.SALES_OPPORTUNITY.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    QUOTATION_PRODUCT(XbbRefTypeEnum.QUOTATION.getCode(), Arrays.asList(SelectProductEnum.DISCOUNT.getAttr(),SelectProductEnum.SELLING_PRICE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    REFUND_PRODUCT(XbbRefTypeEnum.REFUND.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    SUPPLIER_PRODUCT(XbbRefTypeEnum.SUPPLIER.getCode(), new ArrayList<>()),
    RETURNED_PURCHASE_PRODUCT(XbbRefTypeEnum.RETURNED_PURCHASE.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    PURCHASE_PRODUCT(XbbRefTypeEnum.PURCHASE.getCode(), Arrays.asList(SelectProductEnum.COST.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    ASSEMBLE_PRODUCT(XbbRefTypeEnum.ASSEMBLE.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr())),
    INSTOCK_PRODUCT(XbbRefTypeEnum.INSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.COST.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr())),
    OUTSTOCK_PRODUCT(XbbRefTypeEnum.OUTSTOCK.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr())),
    INVENTORY_PRODUCT(XbbRefTypeEnum.INVENTORY.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr())),
    TRANSFER_PRODUCT(XbbRefTypeEnum.TRANSFER.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr())),
    BOM_BILL_PRODUCT(XbbRefTypeEnum.BOM_BILL.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.LOSS_RATE.getAttr())),
    PRODUCTION_ORDER_PRODUCT(XbbRefTypeEnum.PRODUCTION_ORDER.getCode(), Arrays.asList(SelectProductEnum.WAREHOUSE.getAttr(),SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    WORK_ORDER_PRODUCT(XbbRefTypeEnum.WORK_ORDER.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr())),
    ORI_STOCK_PRODUCT(XbbRefTypeEnum.ORI_STOCK.getCode(), Arrays.asList(SelectProductEnum.NUM.getAttr(),SelectProductEnum.MEMO.getAttr(),SelectProductEnum.BATCH.getAttr(),SelectProductEnum.PRODUCE_DATE.getAttr(),SelectProductEnum.GUARANTEE_PERIOD.getAttr())),
    ;

    /**
     * 业务类型
     */
    private int businessType;
    /**
     * 产品关联字段
     */
    private List<String> productEnumList;


    RelativeProductExportEnum(int businessType, List<String> productEnumList) {
        this.businessType = businessType;
        this.productEnumList = productEnumList;
    }

    public static List<Integer> exportProductBusinessTypeList() {
        List<Integer> businessTypeList = new ArrayList<>();
        for (RelativeProductExportEnum relativeProductExportEnum : RelativeProductExportEnum.values()) {
            businessTypeList.add(relativeProductExportEnum.getBusinessType());
        }
        return businessTypeList;
    }


}
